package com.ruoyi.admin.service.app;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.admin.domain.LlmAppSettings;
import com.ruoyi.common.core.domain.AjaxResult;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * <p>
 * 应用设置服务类
 * </p>
 *
 * @author author
 * @since 2025-08-12
 */
public interface LlmAppSettingsService extends IService<LlmAppSettings> {

    /**
     * 添加应用
     */

    AjaxResult addAppSetting(LlmAppSettings llmAppSettings);

    /**
     * 修改应用
     *
     * @param llmAppSettings
     * @return
     */
    AjaxResult updateAppSetting(LlmAppSettings llmAppSettings);

    /**
     * 根据应用名称查询应用设置
     *
     * @param name 应用名称
     * @return 应用设置信息
     */
    LlmAppSettings getAppSettingsByName(String name);

    /**
     * 分页查询应用设置
     *
     * @param page           页码
     * @param size           每页大小
     * @param llmAppSettings 查询条件
     * @return 分页结果
     */
    IPage<LlmAppSettings> getByPage(Integer page, Integer size, LlmAppSettings llmAppSettings);

    /**
     * 根据应用类型查询应用设置列表
     *
     * @param type 应用类型
     * @return 应用设置列表
     */
    List<LlmAppSettings> getAppSettingsByType(String type);

    /**
     * 根据启用状态查询应用设置列表
     *
     * @param enable 启用状态
     * @return 应用设置列表
     */
    List<LlmAppSettings> getAppSettingsByEnable(String enable);

    /**
     * 发布应用
     *
     * @param id 应用ID
     * @return 是否成功
     */
    boolean publishApp(Integer id);

    /**
     * 取消发布应用
     *
     * @param id 应用ID
     * @return 是否成功
     */
    boolean unpublishApp(Integer id);

    /**
     * 批量发布应用
     *
     * @param ids 应用ID列表
     * @return 是否成功
     */
    boolean batchPublishApps(List<Integer> ids);

    /**
     * 批量取消发布应用
     *
     * @param ids 应用ID列表
     * @return 是否成功
     */
    boolean batchUnpublishApps(List<Integer> ids);

    /**
     * 根据发布状态查询应用设置列表
     *
     * @param release 发布状态
     * @return 应用设置列表
     */
    List<LlmAppSettings> getAppSettingsByRelease(Boolean release);

    /**
     * 切换应用发布状态
     *
     * @param id 应用ID
     * @return 是否成功
     */
    boolean toggleAppRelease(Integer id);


    /**
     * 上传应用图标
     *
     * @param file 图片文件
     * @return 图片路径
     */
    String uploadAppIcon(MultipartFile file);


    /**
     * 删除应用图标
     *
     * @param iconUrl 图标路径
     */
    void removeAppIcon(String iconUrl);

    AjaxResult getGatewayPermissions();

}
